<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 什么是函数
      var funA = function () {
        console.log('我是匿名函数保存在变量funA中')
      }
      var funB = [
        function () {
          console.log('我是匿名函数保存在数组funB中')
        },
      ]
      var funC = {
        method: function () {
          console.log('我是匿名函数保存在对象funC中')
        },
      }
      // 函数的调用
      funA() // 普通函数的调用
      funB[0]() // 函数存入数组中的调用
      funC.method() // 对象调用方法的使用

      // 函数可以作为参数传递,也可以作为返回值返回
      var funD = function (funParm) {
        return funParm
      }
      var runFunParmPassedToFunD = funD(function () {
        console.log('欢迎关注微信itclanCoder公众号')
      })
      runFunParmPassedToFunD()

      // 函数是对象,也就是说函数也拥有属性
      var FunE = function () {}
      FunE.property = '随笔川迹'
      console.log(FunE.property)
      // 证明函数式对象
      console.log('funA的数据类型是', typeof funA)
      console.log('funA具体所属', Object.prototype.toString.call(funA))
      console.log('funA是由Object的一个实例对象?', funA instanceof Object)
      console.log('funA函数下面的构造器是', funA.constructor)
      console.log('funA函数是由Object构造出来的?', funA.constructor == Object) // false
      console.log('funA下面的原型', funA.prototype) // funA下面的原型
      console.log('Object下的原型', Object.prototype) // Object对象下原型
      console.log('funA原型下构造器', funA.prototype.constructor) //function fun(){}
      console.log('对象原型下的构造器', Object.prototype.constructor)
    </script>
  </body>
</html>
